package com.itheima.tliasmanagementspringboot.exception;

import com.itheima.tliasmanagementspringboot.common.R;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器
 * (SpringBoot框架提供)
 */
//@RestControllerAdvice = @ControllerAdvice + @ResponseBody
@RestControllerAdvice//全局异常处理器,代码有异常,都会进入处理器中
public class GlobalExceptionHandler {

    //一个方法出来一个特定的异常类
    @ExceptionHandler(Exception.class) //指定能够处理的异常类型
    public R exception(Exception ex){
        ex.printStackTrace();////打印堆栈中的异常信息到控制台
        //捕获到异常之后，响应一个标准的Result
        return R.error("服务器正忙,请联系管理员!");
    }

    @ExceptionHandler(RuntimeException.class)
    public R runTimeException(RuntimeException ex){
        ex.printStackTrace();
        return R.error(ex.getMessage());
    }

    /*@ExceptionHandler(ArithmeticException.class)
    public R runTimeException(ArithmeticException ex){
        ex.printStackTrace();
        return R.error(ex.getMessage());
    }*/
    /*全局处理同一个类型的异常,但是如果信息比较多,不知道那个*/
    @ExceptionHandler(DuplicateKeyException.class)
    public R DuplicateKeyException(DuplicateKeyException ex){
        ex.printStackTrace();
        String exceptionMsg = ex.getCause().toString();
        return R.error(exceptionMsg.substring(exceptionMsg.indexOf(":", 2) + 1));
    }

}
